<!DOCTYPE html><html><head>
      <title>数据库</title>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      
      <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.22/dist/katex.min.css">
      
      
      
      
      
      <style>
      code[class*=language-],pre[class*=language-]{color:#333;background:0 0;font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.4;-moz-tab-size:8;-o-tab-size:8;tab-size:8;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:.8em;overflow:auto;border-radius:3px;background:#f5f5f5}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal;background:#f5f5f5}.token.blockquote,.token.comment{color:#969896}.token.cdata{color:#183691}.token.doctype,.token.macro.property,.token.punctuation,.token.variable{color:#333}.token.builtin,.token.important,.token.keyword,.token.operator,.token.rule{color:#a71d5d}.token.attr-value,.token.regex,.token.string,.token.url{color:#183691}.token.atrule,.token.boolean,.token.code,.token.command,.token.constant,.token.entity,.token.number,.token.property,.token.symbol{color:#0086b3}.token.prolog,.token.selector,.token.tag{color:#63a35c}.token.attr-name,.token.class,.token.class-name,.token.function,.token.id,.token.namespace,.token.pseudo-class,.token.pseudo-element,.token.url-reference .token.variable{color:#795da3}.token.entity{cursor:help}.token.title,.token.title .token.punctuation{font-weight:700;color:#1d3e81}.token.list{color:#ed6a43}.token.inserted{background-color:#eaffea;color:#55a532}.token.deleted{background-color:#ffecec;color:#bd2c00}.token.bold{font-weight:700}.token.italic{font-style:italic}.language-json .token.property{color:#183691}.language-markup .token.tag .token.punctuation{color:#333}.language-css .token.function,code.language-css{color:#0086b3}.language-yaml .token.atrule{color:#63a35c}code.language-yaml{color:#183691}.language-ruby .token.function{color:#333}.language-markdown .token.url{color:#795da3}.language-makefile .token.symbol{color:#795da3}.language-makefile .token.variable{color:#183691}.language-makefile .token.builtin{color:#0086b3}.language-bash .token.keyword{color:#0086b3}pre[data-line]{position:relative;padding:1em 0 1em 3em}pre[data-line] .line-highlight-wrapper{position:absolute;top:0;left:0;background-color:transparent;display:block;width:100%}pre[data-line] .line-highlight{position:absolute;left:0;right:0;padding:inherit 0;margin-top:1em;background:hsla(24,20%,50%,.08);background:linear-gradient(to right,hsla(24,20%,50%,.1) 70%,hsla(24,20%,50%,0));pointer-events:none;line-height:inherit;white-space:pre}pre[data-line] .line-highlight:before,pre[data-line] .line-highlight[data-end]:after{content:attr(data-start);position:absolute;top:.4em;left:.6em;min-width:1em;padding:0 .5em;background-color:hsla(24,20%,50%,.4);color:#f4f1ef;font:bold 65%/1.5 sans-serif;text-align:center;vertical-align:.3em;border-radius:999px;text-shadow:none;box-shadow:0 1px #fff}pre[data-line] .line-highlight[data-end]:after{content:attr(data-end);top:auto;bottom:.4em}html body{font-family:'Helvetica Neue',Helvetica,'Segoe UI',Arial,freesans,sans-serif;font-size:16px;line-height:1.6;color:#333;background-color:#fff;overflow:initial;box-sizing:border-box;word-wrap:break-word}html body>:first-child{margin-top:0}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{line-height:1.2;margin-top:1em;margin-bottom:16px;color:#000}html body h1{font-size:2.25em;font-weight:300;padding-bottom:.3em}html body h2{font-size:1.75em;font-weight:400;padding-bottom:.3em}html body h3{font-size:1.5em;font-weight:500}html body h4{font-size:1.25em;font-weight:600}html body h5{font-size:1.1em;font-weight:600}html body h6{font-size:1em;font-weight:600}html body h1,html body h2,html body h3,html body h4,html body h5{font-weight:600}html body h5{font-size:1em}html body h6{color:#5c5c5c}html body strong{color:#000}html body del{color:#5c5c5c}html body a:not([href]){color:inherit;text-decoration:none}html body a{color:#08c;text-decoration:none}html body a:hover{color:#00a3f5;text-decoration:none}html body img{max-width:100%}html body>p{margin-top:0;margin-bottom:16px;word-wrap:break-word}html body>ol,html body>ul{margin-bottom:16px}html body ol,html body ul{padding-left:2em}html body ol.no-list,html body ul.no-list{padding:0;list-style-type:none}html body ol ol,html body ol ul,html body ul ol,html body ul ul{margin-top:0;margin-bottom:0}html body li{margin-bottom:0}html body li.task-list-item{list-style:none}html body li>p{margin-top:0;margin-bottom:0}html body .task-list-item-checkbox{margin:0 .2em .25em -1.8em;vertical-align:middle}html body .task-list-item-checkbox:hover{cursor:pointer}html body blockquote{margin:16px 0;font-size:inherit;padding:0 15px;color:#5c5c5c;background-color:#f0f0f0;border-left:4px solid #d6d6d6}html body blockquote>:first-child{margin-top:0}html body blockquote>:last-child{margin-bottom:0}html body hr{height:4px;margin:32px 0;background-color:#d6d6d6;border:0 none}html body table{margin:10px 0 15px 0;border-collapse:collapse;border-spacing:0;display:block;width:100%;overflow:auto;word-break:normal;word-break:keep-all}html body table th{font-weight:700;color:#000}html body table td,html body table th{border:1px solid #d6d6d6;padding:6px 13px}html body dl{padding:0}html body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:700}html body dl dd{padding:0 16px;margin-bottom:16px}html body code{font-family:Menlo,Monaco,Consolas,'Courier New',monospace;font-size:.85em;color:#000;background-color:#f0f0f0;border-radius:3px;padding:.2em 0}html body code::after,html body code::before{letter-spacing:-.2em;content:'\00a0'}html body pre>code{padding:0;margin:0;word-break:normal;white-space:pre;background:0 0;border:0}html body .highlight{margin-bottom:16px}html body .highlight pre,html body pre{padding:1em;overflow:auto;line-height:1.45;border:#d6d6d6;border-radius:3px}html body .highlight pre{margin-bottom:0;word-break:normal}html body pre code,html body pre tt{display:inline;max-width:initial;padding:0;margin:0;overflow:initial;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}html body pre code:after,html body pre code:before,html body pre tt:after,html body pre tt:before{content:normal}html body blockquote,html body dl,html body ol,html body p,html body pre,html body ul{margin-top:0;margin-bottom:16px}html body kbd{color:#000;border:1px solid #d6d6d6;border-bottom:2px solid #c7c7c7;padding:2px 4px;background-color:#f0f0f0;border-radius:3px}@media print{html body{background-color:#fff}html body h1,html body h2,html body h3,html body h4,html body h5,html body h6{color:#000;page-break-after:avoid}html body blockquote{color:#5c5c5c}html body pre{page-break-inside:avoid}html body table{display:table}html body img{display:block;max-width:100%;max-height:100%}html body code,html body pre{word-wrap:break-word;white-space:pre}}.markdown-preview{width:100%;height:100%;box-sizing:border-box}.markdown-preview ul{list-style:disc}.markdown-preview ul ul{list-style:circle}.markdown-preview ul ul ul{list-style:square}.markdown-preview ol{list-style:decimal}.markdown-preview ol ol,.markdown-preview ul ol{list-style-type:lower-roman}.markdown-preview ol ol ol,.markdown-preview ol ul ol,.markdown-preview ul ol ol,.markdown-preview ul ul ol{list-style-type:lower-alpha}.markdown-preview .newpage,.markdown-preview .pagebreak{page-break-before:always}.markdown-preview pre.line-numbers{position:relative;padding-left:3.8em;counter-reset:linenumber}.markdown-preview pre.line-numbers>code{position:relative}.markdown-preview pre.line-numbers .line-numbers-rows{position:absolute;pointer-events:none;top:1em;font-size:100%;left:0;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.markdown-preview pre.line-numbers .line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.markdown-preview pre.line-numbers .line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}.markdown-preview .mathjax-exps .MathJax_Display{text-align:center!important}.markdown-preview:not([data-for=preview]) .code-chunk .code-chunk-btn-group{display:none}.markdown-preview:not([data-for=preview]) .code-chunk .status{display:none}.markdown-preview:not([data-for=preview]) .code-chunk .output-div{margin-bottom:16px}.markdown-preview .md-toc{padding:0}.markdown-preview .md-toc .md-toc-link-wrapper .md-toc-link{display:inline;padding:.25rem 0}.markdown-preview .md-toc .md-toc-link-wrapper .md-toc-link div,.markdown-preview .md-toc .md-toc-link-wrapper .md-toc-link p{display:inline}.markdown-preview .md-toc .md-toc-link-wrapper.highlighted .md-toc-link{font-weight:800}.scrollbar-style::-webkit-scrollbar{width:8px}.scrollbar-style::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}.scrollbar-style::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,.66);border:4px solid rgba(150,150,150,.66);background-clip:content-box}html body[for=html-export]:not([data-presentation-mode]){position:relative;width:100%;height:100%;top:0;left:0;margin:0;padding:0;overflow:auto}html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{position:relative;top:0;min-height:100vh}@media screen and (min-width:914px){html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{padding:2em calc(50% - 457px + 2em)}}@media screen and (max-width:914px){html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=html-export]:not([data-presentation-mode]) .markdown-preview{font-size:14px!important;padding:1em}}@media print{html body[for=html-export]:not([data-presentation-mode]) #sidebar-toc-btn{display:none}}html body[for=html-export]:not([data-presentation-mode]) #sidebar-toc-btn{position:fixed;bottom:8px;left:8px;font-size:28px;cursor:pointer;color:inherit;z-index:99;width:32px;text-align:center;opacity:.4}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] #sidebar-toc-btn{opacity:1}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc{position:fixed;top:0;left:0;width:300px;height:100%;padding:32px 0 48px 0;font-size:14px;box-shadow:0 0 4px rgba(150,150,150,.33);box-sizing:border-box;overflow:auto;background-color:inherit}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar{width:8px}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-track{border-radius:10px;background-color:transparent}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc::-webkit-scrollbar-thumb{border-radius:5px;background-color:rgba(150,150,150,.66);border:4px solid rgba(150,150,150,.66);background-clip:content-box}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc a{text-decoration:none}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc{padding:0 16px}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper .md-toc-link{display:inline;padding:.25rem 0}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper .md-toc-link div,html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper .md-toc-link p{display:inline}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .md-sidebar-toc .md-toc .md-toc-link-wrapper.highlighted .md-toc-link{font-weight:800}html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{left:300px;width:calc(100% - 300px);padding:2em calc(50% - 457px - 300px / 2);margin:0;box-sizing:border-box}@media screen and (max-width:1274px){html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{padding:2em}}@media screen and (max-width:450px){html body[for=html-export]:not([data-presentation-mode])[html-show-sidebar-toc] .markdown-preview{width:100%}}html body[for=html-export]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .markdown-preview{left:50%;transform:translateX(-50%)}html body[for=html-export]:not([data-presentation-mode]):not([html-show-sidebar-toc]) .md-sidebar-toc{display:none}
/* Please visit the URL below for more information: */
/*   https://shd101wyy.github.io/markdown-preview-enhanced/#/customize-css */

      </style>
      <!-- The content below will be included at the end of the <head> element. --><script type="text/javascript">
  document.addEventListener("DOMContentLoaded", function () {
    // your code here
  });
</script></head><body for="html-export">
    
    
      <div class="crossnote markdown-preview  ">
      
<p>以下是完整的数据库字典文档（Markdown格式）</p>
<h3 id="修改时间"><strong>修改时间</strong> </h3>
<table>
<thead>
<tr>
<th>修改时间</th>
<th>修改人</th>
<th>修改内容</th>
</tr>
</thead>
<tbody>
<tr>
<td>2025-09-17</td>
<td>t</td>
<td>1、API程序中，在Controller中新增接口方法   GetChldDeptAndEmpListNew ，该接口用于获取指定部门下的所有子部门和员工列表。</td>
</tr>
<tr>
<td>2025-09-17</td>
<td>t</td>
<td>1、修改数据库视图v_UserReceivedDocuments，支持 查询指定抄送给指定人的公告信息</td>
</tr>
</tbody>
</table>
<p>|2025-09-25|t|1、数据库表 FileCategoryPermissions 添加字段 can_file_view 、can_file_download 用来存储该分类权限的查看和下载权限 2、修改 视图 v_FileCategoryPermissions、v_FileOrgPermissionsTree、v_FileRolePermissionsAll、v_FileUserPermissionsAll 的修改，主要添加字段  canFileDownload、canFileView</p>
<p>3、修改 表函数 fn_UserFilePermissions ，添加CanFileDownload、CanFileView 字段<br>
4、修改后台接口 FileMasterController.cs 的 FileEdit方法，FileMasterBLL 中修改 GetFileById 方法   FilePermissionDAL 文件中添加 getFileUserPermission方法，以及修改 GetPermissionById、GetPermission、SavePermission、BatchSavePermissions等方法<br>
5、前端项目中修改 file-type.vue 添加 canFileDownload、canFileView的Ceckbox，修改file-form ,传入参数到附件控件， 修改附件控件DxFileAttachment，增加参数 ，用来判断是否显示预览及下载按钮<br>
|</p>
<h3 id="数据库字典总览"><strong>数据库字典总览</strong> </h3>
<p>包含以下表结构：<code>Document</code>（公文管理表）、<code>DocumentCategory</code>（公文分类表）、<code>DocumentReadRecord</code>（公文阅读记录表）、<code>DocumentSecurityLevel</code>（公文安全级别配置表）、<code>FileMaster</code>（文件主表）、<code>FileCategoryPermissions</code>（文件分类权限表）、<code>FileCategory</code>（文件分类表）、<code>FileSecurityLevel</code>（文件安全级别表）、<code>FileTags</code>（文件标签表）。</p>
<h4 id="1-document-表公文管理表"><strong>1. Document 表（公文管理表）</strong> </h4>
<p><strong>说明</strong>：存储公文的基本信息、流程状态和分发信息</p>
<table>
<thead>
<tr>
<th>字段名</th>
<th>数据类型</th>
<th>允许空</th>
<th>默认值</th>
<th>约束/索引</th>
<th>说明（含扩展）</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Id</code></td>
<td><code>nvarchar(50)</code></td>
<td>否</td>
<td>-</td>
<td>主键（PK_Document）</td>
<td>公文唯一标识，关联阅读记录等表</td>
</tr>
<tr>
<td><code>Title</code></td>
<td><code>nvarchar(255)</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>公文标题（不可为空）</td>
</tr>
<tr>
<td><code>DocumentNumber</code></td>
<td><code>nvarchar(50)</code></td>
<td>是</td>
<td>-</td>
<td>索引（IX_Document_DocumentNumber）</td>
<td>公文文号（如“XX发〔2024〕X号”）</td>
</tr>
<tr>
<td><code>Summary</code></td>
<td><code>nvarchar(4000)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>公文内容摘要（简洁描述）</td>
</tr>
<tr>
<td><code>CategoryId</code></td>
<td><code>nvarchar(50)</code></td>
<td>否</td>
<td>-</td>
<td>索引（IX_Document_CategoryId）</td>
<td>关联 <code>DocumentCategory.Id</code>，标识公文分类</td>
</tr>
<tr>
<td><code>CategoryName</code></td>
<td><code>nvarchar(255)</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>分类名称（冗余，避免关联查询）</td>
</tr>
<tr>
<td><code>SecurityLevel</code></td>
<td><code>varchar(255)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>安全级别（如“秘密”“公开”）</td>
</tr>
<tr>
<td><code>Creator</code></td>
<td><code>nvarchar(50)</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>创建人账号/ID</td>
</tr>
<tr>
<td><code>CreateTime</code></td>
<td><code>datetime</code></td>
<td>否</td>
<td>-</td>
<td>索引（IX_Document_CreateTime）</td>
<td>创建时间（降序索引，便于按时间查询）</td>
</tr>
<tr>
<td><code>Modifier</code></td>
<td><code>nvarchar(50)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>最后修改人账号/ID</td>
</tr>
<tr>
<td><code>UpdatedAt</code></td>
<td><code>datetime</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>最后更新时间</td>
</tr>
<tr>
<td><code>CreatedAt</code></td>
<td><code>datetime</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>记录创建时间（框架自动生成）</td>
</tr>
<tr>
<td><code>Status</code></td>
<td><code>int</code></td>
<td>否</td>
<td><code>0</code></td>
<td>索引（IX_Document_Status）</td>
<td>状态码：0=草稿，1=待审批，2=已发布等（需结合业务枚举）</td>
</tr>
<tr>
<td><code>StatusName</code></td>
<td><code>nvarchar(50)</code></td>
<td>否</td>
<td><code>N'草稿'</code></td>
<td>-</td>
<td>状态名称（与 <code>Status</code> 对应，如“草稿”“已发布”）</td>
</tr>
<tr>
<td><code>Approver</code></td>
<td><code>nvarchar(50)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>审批人账号/ID</td>
</tr>
<tr>
<td><code>ApproveTime</code></td>
<td><code>datetime</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>审批通过时间</td>
</tr>
<tr>
<td><code>PublishTime</code></td>
<td><code>datetime</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>公文发布时间</td>
</tr>
<tr>
<td><code>IssueDate</code></td>
<td><code>datetime2(7)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>发文日期（精确到毫秒）</td>
</tr>
<tr>
<td><code>Content</code></td>
<td><code>nvarchar(max)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>公文正文内容（大文本）</td>
</tr>
<tr>
<td><code>Remark</code></td>
<td><code>nvarchar(max)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>额外备注信息</td>
</tr>
<tr>
<td><code>Priority</code></td>
<td><code>nvarchar(255)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>优先级（如“高”“中”“低”）</td>
</tr>
<tr>
<td><code>Urgency</code></td>
<td><code>nvarchar(255)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>紧急程度（如“特急”“平急”）</td>
</tr>
<tr>
<td><code>Drafter</code></td>
<td><code>nvarchar(3000)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>拟稿人（可多人，用分隔符区分）</td>
</tr>
<tr>
<td><code>Scope</code></td>
<td><code>nvarchar(500)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>适用范围（如“全公司”“技术部”）</td>
</tr>
<tr>
<td><code>PrimaryReceiver</code></td>
<td><code>nvarchar(1000)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>主送对象ID（多个用分隔符）</td>
</tr>
<tr>
<td><code>PrimaryReceiverName</code></td>
<td><code>nvarchar(1000)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>主送对象名称（冗余显示）</td>
</tr>
<tr>
<td><code>CcReceiver</code></td>
<td><code>nvarchar(1000)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>抄送对象ID（多个用分隔符）</td>
</tr>
<tr>
<td><code>CcReceiverName</code></td>
<td><code>nvarchar(1000)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>抄送对象名称（冗余显示）</td>
</tr>
<tr>
<td><code>DepartmentId</code></td>
<td><code>nvarchar(50)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>所属部门ID（关联部门表）</td>
</tr>
<tr>
<td><code>DepartmentName</code></td>
<td><code>nvarchar(255)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>所属部门名称（冗余显示）</td>
</tr>
</tbody>
</table>
<h4 id="2-documentcategory-表公文分类表"><strong>2. DocumentCategory 表（公文分类表）</strong> </h4>
<p><strong>说明</strong>：定义公文的分类体系，支持层级结构（如“通知”“报告”“制度”等）</p>
<table>
<thead>
<tr>
<th>字段名</th>
<th>数据类型</th>
<th>允许空</th>
<th>默认值</th>
<th>约束/索引</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Id</code></td>
<td><code>nvarchar(50)</code></td>
<td>否</td>
<td>-</td>
<td>主键（PK_DocumentCategory）</td>
<td>分类ID，被 <code>Document.CategoryId</code> 关联</td>
</tr>
<tr>
<td><code>ParentId</code></td>
<td><code>nvarchar(50)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>父分类ID（自关联，实现层级，如“通知”→“人事通知”）</td>
</tr>
<tr>
<td><code>CategoryName</code></td>
<td><code>nvarchar(255)</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>分类名称（如“会议纪要”）</td>
</tr>
<tr>
<td><code>Description</code></td>
<td><code>nvarchar(max)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>分类描述（说明该分类用途）</td>
</tr>
<tr>
<td><code>SortOrder</code></td>
<td><code>int</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>排序序号（值越小越靠前）</td>
</tr>
<tr>
<td><code>Status</code></td>
<td><code>int</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>状态：1=启用，0=禁用（禁用后不可选）</td>
</tr>
<tr>
<td><code>Remark</code></td>
<td><code>nvarchar(max)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>备注信息</td>
</tr>
<tr>
<td><code>CreatedAt</code></td>
<td><code>datetime</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>记录创建时间</td>
</tr>
<tr>
<td><code>UpdatedAt</code></td>
<td><code>datetime</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>最后更新时间</td>
</tr>
</tbody>
</table>
<h4 id="3-documentreadrecord-表公文阅读记录表"><strong>3. DocumentReadRecord 表（公文阅读记录表）</strong> </h4>
<p><strong>说明</strong>：记录用户对公文的阅读行为（首次阅读时间、阅读时长等）</p>
<table>
<thead>
<tr>
<th>字段名</th>
<th>数据类型</th>
<th>允许空</th>
<th>默认值</th>
<th>约束/索引</th>
<th>说明（含扩展）</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Id</code></td>
<td><code>bigint</code></td>
<td>否</td>
<td>自增（1,1）</td>
<td>主键（PK_DocumentReadRecord）</td>
<td>阅读记录ID（自增唯一）</td>
</tr>
<tr>
<td><code>DocumentId</code></td>
<td><code>nvarchar(50)</code></td>
<td>否</td>
<td>-</td>
<td>外键+索引（IX_DocumentId）</td>
<td>关联 <code>Document.Id</code>，级联删除（公文删除则记录删除）</td>
</tr>
<tr>
<td><code>UserId</code></td>
<td><code>varchar(50)</code></td>
<td>否</td>
<td>-</td>
<td>外键+索引（IX_UserId）</td>
<td>关联 <code>Users.UserID</code>，级联删除（用户删除则记录删除）</td>
</tr>
<tr>
<td><code>UserName</code></td>
<td><code>nvarchar(50)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>用户名（冗余，避免关联用户表）</td>
</tr>
<tr>
<td><code>ReadTime</code></td>
<td><code>datetime</code></td>
<td>否</td>
<td><code>getdate()</code></td>
<td>-</td>
<td>首次阅读时间（默认当前时间）</td>
</tr>
<tr>
<td><code>LastViewTime</code></td>
<td><code>datetime</code></td>
<td>否</td>
<td><code>getdate()</code></td>
<td>-</td>
<td>最后一次查看时间</td>
</tr>
<tr>
<td><code>ReadSource</code></td>
<td><code>tinyint</code></td>
<td>否</td>
<td><code>0</code></td>
<td>-</td>
<td>阅读来源：0=自动标记（停留10秒），1=手动点击“已读”</td>
</tr>
<tr>
<td><code>ReadDuration</code></td>
<td><code>int</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>阅读时长（秒，可统计阅读深度）</td>
</tr>
<tr>
<td><code>ClientIp</code></td>
<td><code>varchar(50)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>客户端IP（记录访问终端）</td>
</tr>
</tbody>
</table>
<p><strong>约束</strong>：</p>
<ul>
<li>唯一索引 <code>UK_DocumentUser</code>：<code>DocumentId + UserId</code> 唯一，确保同一用户对同一公文仅一条记录。</li>
</ul>
<h4 id="4-documentsecuritylevel-表公文安全级别配置表"><strong>4. DocumentSecurityLevel 表（公文安全级别配置表）</strong> </h4>
<p><strong>说明</strong>：定义公文的安全级别及对应的管控措施（如保密要求、访问限制）</p>
<table>
<thead>
<tr>
<th>字段名</th>
<th>数据类型</th>
<th>允许空</th>
<th>默认值</th>
<th>约束/索引</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Id</code></td>
<td><code>uniqueidentifier</code></td>
<td>否</td>
<td><code>newid()</code></td>
<td>主键（PK__Document__3214EC07010220A0）</td>
<td>安全级别ID（唯一标识）</td>
</tr>
<tr>
<td><code>Code</code></td>
<td><code>nvarchar(50)</code></td>
<td>否</td>
<td>-</td>
<td>唯一索引（UQ__Document__A25C5AA7630261F9）</td>
<td>安全编码（如“SEC001”，唯一）</td>
</tr>
<tr>
<td><code>Name</code></td>
<td><code>nvarchar(100)</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>安全级别名称（如“绝密”“内部公开”）</td>
</tr>
<tr>
<td><code>SortOrder</code></td>
<td><code>int</code></td>
<td>否</td>
<td><code>0</code></td>
<td>-</td>
<td>排序序号（按安全等级排序）</td>
</tr>
<tr>
<td><code>SecurityMeasures</code></td>
<td><code>nvarchar(max)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>安全管控措施（如“禁止打印”“仅限内网访问”）</td>
</tr>
<tr>
<td><code>SecurityOfficer</code></td>
<td><code>nvarchar(50)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>安全负责人（联系人）</td>
</tr>
<tr>
<td><code>Remarks</code></td>
<td><code>nvarchar(max)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>备注说明</td>
</tr>
<tr>
<td><code>CreatedBy</code></td>
<td><code>nvarchar(50)</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>创建人ID</td>
</tr>
<tr>
<td><code>CreatedAt</code></td>
<td><code>datetime</code></td>
<td>否</td>
<td><code>getdate()</code></td>
<td>-</td>
<td>创建时间（默认当前时间）</td>
</tr>
<tr>
<td><code>ModifiedBy</code></td>
<td><code>nvarchar(50)</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>最后修改人ID</td>
</tr>
<tr>
<td><code>ModifiedAt</code></td>
<td><code>datetime</code></td>
<td>否</td>
<td><code>getdate()</code></td>
<td>-</td>
<td>最后修改时间（默认当前时间）</td>
</tr>
<tr>
<td><code>Status</code></td>
<td><code>tinyint</code></td>
<td>否</td>
<td><code>1</code></td>
<td>-</td>
<td>状态：1=启用，0=禁用</td>
</tr>
</tbody>
</table>
<h4 id="5-filemaster-表文件主表"><strong>5. FileMaster 表（文件主表）</strong> </h4>
<p><strong>说明</strong>：存储文件/文件夹的基本信息、版本管理及审批状态</p>
<table>
<thead>
<tr>
<th>字段名</th>
<th>数据类型</th>
<th>允许空</th>
<th>默认值</th>
<th>约束/索引</th>
<th>说明（含扩展）</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Id</code></td>
<td><code>nvarchar(50)</code></td>
<td>否</td>
<td>-</td>
<td>主键（PK__FileMast__3214EC0718F49724）</td>
<td>文件唯一标识</td>
</tr>
<tr>
<td><code>CategoryId</code></td>
<td><code>nvarchar(50)</code></td>
<td>是</td>
<td>-</td>
<td>索引（IX_FileMaster_CategoryId）</td>
<td>关联 <code>FileCategory.Id</code>，文件分类</td>
</tr>
<tr>
<td><code>Title</code></td>
<td><code>nvarchar(1000)</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>文件标题/名称</td>
</tr>
<tr>
<td><code>FileCode</code></td>
<td><code>nvarchar(100)</code></td>
<td>是</td>
<td>-</td>
<td>索引（IX_FileMaster_FileCode）</td>
<td>文件编码（如“FILE2024001”）</td>
</tr>
<tr>
<td><code>FileVersionCode</code></td>
<td><code>nvarchar(100)</code></td>
<td>是</td>
<td>-</td>
<td>索引（IX_FileMaster_FileVersionCode）</td>
<td>版本编码（如“V1.0”“V2.1”）</td>
</tr>
<tr>
<td><code>SecurityLevelId</code></td>
<td><code>nvarchar(50)</code></td>
<td>是</td>
<td>-</td>
<td>索引（IX_FileMaster_SecurityLevelId）</td>
<td>关联 <code>FileSecurityLevel.Id</code>，安全级别</td>
</tr>
<tr>
<td><code>Version</code></td>
<td><code>int</code></td>
<td>否</td>
<td><code>1</code></td>
<td>-</td>
<td>版本号（默认1，更新后递增）</td>
</tr>
<tr>
<td><code>ParentId</code></td>
<td><code>nvarchar(50)</code></td>
<td>是</td>
<td>-</td>
<td>索引（IX_FileMaster_ParentId）</td>
<td>父文件ID（用于文件夹层级，如“文件夹A”包含“文件B”）</td>
</tr>
<tr>
<td><code>IsLatestVersion</code></td>
<td><code>bit</code></td>
<td>否</td>
<td><code>1</code></td>
<td>-</td>
<td>是否最新版本：1=是，0=历史版本</td>
</tr>
<tr>
<td><code>IsDirectory</code></td>
<td><code>bit</code></td>
<td>否</td>
<td><code>0</code></td>
<td>-</td>
<td>是否为文件夹：1=是，0=文件</td>
</tr>
<tr>
<td><code>Status</code></td>
<td><code>int</code></td>
<td>否</td>
<td><code>1</code></td>
<td>-</td>
<td>状态：1=有效，0=删除（逻辑删除）</td>
</tr>
<tr>
<td><code>Remark</code></td>
<td><code>nvarchar(max)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>备注信息</td>
</tr>
<tr>
<td><code>ChangeReason</code></td>
<td><code>nvarchar(1000)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>版本变更原因（如“修复格式错误”）</td>
</tr>
<tr>
<td><code>ChangeContent</code></td>
<td><code>nvarchar(max)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>变更内容详情</td>
</tr>
<tr>
<td><code>CreatorId</code></td>
<td><code>nvarchar(50)</code></td>
<td>否</td>
<td>-</td>
<td>索引（IX_FileMaster_CreatorId）</td>
<td>创建人ID</td>
</tr>
<tr>
<td><code>CreatorName</code></td>
<td><code>nvarchar(100)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>创建人名称（冗余）</td>
</tr>
<tr>
<td><code>CreatedAt</code></td>
<td><code>datetime</code></td>
<td>否</td>
<td><code>getdate()</code></td>
<td>-</td>
<td>创建时间（默认当前时间）</td>
</tr>
<tr>
<td><code>UpdaterId</code></td>
<td><code>nvarchar(50)</code></td>
<td>是</td>
<td>-</td>
<td>索引（IX_FileMaster_UpdaterId）</td>
<td>最后更新人ID</td>
</tr>
<tr>
<td><code>UpdaterName</code></td>
<td><code>nvarchar(100)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>最后更新人名称（冗余）</td>
</tr>
<tr>
<td><code>UpdatedAt</code></td>
<td><code>datetime</code></td>
<td>否</td>
<td><code>getdate()</code></td>
<td>-</td>
<td>最后更新时间（默认当前时间）</td>
</tr>
<tr>
<td><code>DeletedAt</code></td>
<td><code>datetime</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>逻辑删除时间（null=未删除）</td>
</tr>
<tr>
<td><code>ApprovalStatus</code></td>
<td><code>int</code></td>
<td>否</td>
<td><code>0</code></td>
<td>索引（IX_FileMaster_ApprovalStatus）</td>
<td>审批状态：0=待审批，1=已通过，2=已驳回</td>
</tr>
<tr>
<td><code>ApprovalFlowId</code></td>
<td><code>nvarchar(50)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>审批流程ID（关联工作流表）</td>
</tr>
<tr>
<td><code>ApprovalOpinion</code></td>
<td><code>nvarchar(max)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>审批意见汇总</td>
</tr>
<tr>
<td><code>ApprovalTime</code></td>
<td><code>datetime</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>审批完成时间</td>
</tr>
<tr>
<td><code>ApproverId</code></td>
<td><code>nvarchar(50)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>审批人ID</td>
</tr>
<tr>
<td><code>ApproverName</code></td>
<td><code>nvarchar(100)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>审批人名称（冗余）</td>
</tr>
<tr>
<td><code>SystemTags</code></td>
<td><code>nvarchar(1000)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>系统标签（如“技术文档”“模板”）</td>
</tr>
<tr>
<td><code>UserTags</code></td>
<td><code>nvarchar(1000)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>用户自定义标签（如“项目A”）</td>
</tr>
<tr>
<td><code>FileGroupId</code></td>
<td><code>nvarchar(50)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>文件组ID（关联文件组表）</td>
</tr>
<tr>
<td><code>ProjectId</code></td>
<td><code>nvarchar(50)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>项目ID（关联项目表，如“项目X”）</td>
</tr>
</tbody>
</table>
<h4 id="6-filecategorypermissions-表文件分类权限表"><strong>6. FileCategoryPermissions 表（文件分类权限表）</strong> </h4>
<p><strong>说明</strong>：控制用户/角色/部门对文件分类的操作权限（查看、编辑等）</p>
<table>
<thead>
<tr>
<th>字段名</th>
<th>数据类型</th>
<th>允许空</th>
<th>默认值</th>
<th>约束/索引</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>id</code></td>
<td><code>varchar(36)</code></td>
<td>否</td>
<td>-</td>
<td>主键（PK_[FileCategoryPermissions]）</td>
<td>权限记录ID</td>
</tr>
<tr>
<td><code>Category_id</code></td>
<td><code>varchar(36)</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>关联 <code>FileCategory.Id</code>，文件分类ID</td>
</tr>
<tr>
<td><code>user_id</code></td>
<td><code>varchar(36)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>用户ID（与 <code>org_id</code> <code>role_id</code> 三选一）</td>
</tr>
<tr>
<td><code>org_id</code></td>
<td><code>varchar(36)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>部门ID（控制部门级权限）</td>
</tr>
<tr>
<td><code>can_view</code></td>
<td><code>bit</code></td>
<td>否</td>
<td><code>0</code></td>
<td>-</td>
<td>是否允许查看：1=是，0=否</td>
</tr>
<tr>
<td><code>can_edit</code></td>
<td><code>bit</code></td>
<td>否</td>
<td><code>0</code></td>
<td>-</td>
<td>是否允许编辑：1=是，0=否</td>
</tr>
<tr>
<td><code>can_delete</code></td>
<td><code>bit</code></td>
<td>否</td>
<td><code>0</code></td>
<td>-</td>
<td>是否允许删除：1=是，0=否</td>
</tr>
<tr>
<td><code>can_share</code></td>
<td><code>bit</code></td>
<td>否</td>
<td><code>0</code></td>
<td>-</td>
<td>是否允许分享：1=是，0=否</td>
</tr>
<tr>
<td><code>inherit_from</code></td>
<td><code>varchar(36)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>继承自哪个权限记录（权限继承）</td>
</tr>
<tr>
<td><code>status</code></td>
<td><code>tinyint</code></td>
<td>否</td>
<td><code>1</code></td>
<td>-</td>
<td>状态：1=启用，0=禁用</td>
</tr>
<tr>
<td><code>remark</code></td>
<td><code>nvarchar(500)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>备注说明</td>
</tr>
<tr>
<td><code>created_at</code></td>
<td><code>datetime</code></td>
<td>否</td>
<td><code>getdate()</code></td>
<td>-</td>
<td>创建时间</td>
</tr>
<tr>
<td><code>updated_at</code></td>
<td><code>datetime</code></td>
<td>否</td>
<td><code>getdate()</code></td>
<td>-</td>
<td>最后更新时间</td>
</tr>
<tr>
<td><code>updated_by</code></td>
<td><code>nvarchar(500)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>最后更新人</td>
</tr>
<tr>
<td><code>created_by</code></td>
<td><code>nvarchar(500)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>创建人</td>
</tr>
<tr>
<td><code>role_id</code></td>
<td><code>nvarchar(500)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>角色ID（控制角色级权限）</td>
</tr>
<tr>
<td><code>can_download</code></td>
<td><code>bit</code></td>
<td>是</td>
<td><code>0</code></td>
<td>-</td>
<td>是否允许下载：1=是，0=否</td>
</tr>
</tbody>
</table>
<h4 id="7-filecategory-表文件分类表"><strong>7. FileCategory 表（文件分类表）</strong> </h4>
<p><strong>说明</strong>：定义文件/文件夹的分类体系（如“技术文档”“财务报表”等）</p>
<table>
<thead>
<tr>
<th>字段名</th>
<th>数据类型</th>
<th>允许空</th>
<th>默认值</th>
<th>约束/索引</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Id</code></td>
<td><code>nvarchar(50)</code></td>
<td>否</td>
<td>-</td>
<td>主键（PK_FileCategory）</td>
<td>分类ID，被 <code>FileMaster.CategoryId</code> 关联</td>
</tr>
<tr>
<td><code>ParentId</code></td>
<td><code>nvarchar(50)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>父分类ID（自关联，实现层级）</td>
</tr>
<tr>
<td><code>CategoryName</code></td>
<td><code>nvarchar(255)</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>分类名称（如“产品手册”）</td>
</tr>
<tr>
<td><code>Description</code></td>
<td><code>nvarchar(max)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>分类描述</td>
</tr>
<tr>
<td><code>SortOrder</code></td>
<td><code>int</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>排序序号</td>
</tr>
<tr>
<td><code>Status</code></td>
<td><code>int</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>状态：1=启用，0=禁用</td>
</tr>
<tr>
<td><code>Remark</code></td>
<td><code>nvarchar(max)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>备注说明</td>
</tr>
<tr>
<td><code>CreatedAt</code></td>
<td><code>datetime</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>创建时间</td>
</tr>
<tr>
<td><code>UpdatedAt</code></td>
<td><code>datetime</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>最后更新时间</td>
</tr>
<tr>
<td><code>Inherit</code></td>
<td><code>bit</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>是否继承父分类权限：1=是，0=否</td>
</tr>
<tr>
<td><code>InheritCategoryId</code></td>
<td><code>nvarchar(100)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>继承的父分类ID（若 <code>Inherit=1</code>）</td>
</tr>
</tbody>
</table>
<h4 id="8-filesecuritylevel-表文件安全级别表"><strong>8. FileSecurityLevel 表（文件安全级别表）</strong> </h4>
<p><strong>说明</strong>：定义文件的安全级别及管控措施（与公文安全级别类似，独立管理）</p>
<table>
<thead>
<tr>
<th>字段名</th>
<th>数据类型</th>
<th>允许空</th>
<th>默认值</th>
<th>约束/索引</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Id</code></td>
<td><code>uniqueidentifier</code></td>
<td>否</td>
<td><code>newid()</code></td>
<td>主键（PK__FileSecu__3214EC0727505998）</td>
<td>安全级别ID，被 <code>FileMaster.SecurityLevelId</code> 关联</td>
</tr>
<tr>
<td><code>Code</code></td>
<td><code>nvarchar(50)</code></td>
<td>否</td>
<td>-</td>
<td>唯一索引（UQ__FileSecu__A25C5AA7981E84C1）</td>
<td>安全编码（唯一，如“FSEC001”）</td>
</tr>
<tr>
<td><code>Name</code></td>
<td><code>nvarchar(100)</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>安全级别名称（如“机密”“公开”）</td>
</tr>
<tr>
<td><code>SortOrder</code></td>
<td><code>int</code></td>
<td>否</td>
<td><code>0</code></td>
<td>-</td>
<td>排序序号</td>
</tr>
<tr>
<td><code>SecurityMeasures</code></td>
<td><code>nvarchar(max)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>安全管控措施</td>
</tr>
<tr>
<td><code>SecurityOfficer</code></td>
<td><code>nvarchar(50)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>安全负责人</td>
</tr>
<tr>
<td><code>Remarks</code></td>
<td><code>nvarchar(max)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>备注说明</td>
</tr>
<tr>
<td><code>CreatedBy</code></td>
<td><code>nvarchar(50)</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>创建人ID</td>
</tr>
<tr>
<td><code>CreatedAt</code></td>
<td><code>datetime</code></td>
<td>否</td>
<td><code>getdate()</code></td>
<td>-</td>
<td>创建时间</td>
</tr>
<tr>
<td><code>ModifiedBy</code></td>
<td><code>nvarchar(50)</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>最后修改人ID</td>
</tr>
<tr>
<td><code>ModifiedAt</code></td>
<td><code>datetime</code></td>
<td>否</td>
<td><code>getdate()</code></td>
<td>-</td>
<td>最后修改时间</td>
</tr>
<tr>
<td><code>Status</code></td>
<td><code>tinyint</code></td>
<td>否</td>
<td><code>1</code></td>
<td>-</td>
<td>状态：1=启用，0=禁用</td>
</tr>
</tbody>
</table>
<h4 id="9-filetags-表文件标签表"><strong>9. FileTags 表（文件标签表）</strong> </h4>
<p><strong>说明</strong>：定义文件可使用的标签（系统标签或用户标签），支持层级</p>
<table>
<thead>
<tr>
<th>字段名</th>
<th>数据类型</th>
<th>允许空</th>
<th>默认值</th>
<th>约束/索引</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>Id</code></td>
<td><code>nvarchar(100)</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>标签ID</td>
</tr>
<tr>
<td><code>TagName</code></td>
<td><code>nvarchar(100)</code></td>
<td>否</td>
<td>-</td>
<td>-</td>
<td>标签名称（如“重要”“2024”）</td>
</tr>
<tr>
<td><code>Description</code></td>
<td><code>nvarchar(500)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>标签描述</td>
</tr>
<tr>
<td><code>ParentId</code></td>
<td><code>nvarchar(100)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>父标签ID（层级标签）</td>
</tr>
<tr>
<td><code>SortOrder</code></td>
<td><code>int</code></td>
<td>否</td>
<td><code>0</code></td>
<td>-</td>
<td>排序序号</td>
</tr>
<tr>
<td><code>Status</code></td>
<td><code>tinyint</code></td>
<td>否</td>
<td><code>1</code></td>
<td>-</td>
<td>状态：1=启用，0=禁用</td>
</tr>
<tr>
<td><code>TagType</code></td>
<td><code>tinyint</code></td>
<td>否</td>
<td><code>1</code></td>
<td>-</td>
<td>标签类型：1=系统标签，2=用户自定义标签</td>
</tr>
<tr>
<td><code>CreatedBy</code></td>
<td><code>nvarchar(100)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>创建人ID</td>
</tr>
<tr>
<td><code>CreatedAt</code></td>
<td><code>datetime</code></td>
<td>否</td>
<td><code>getdate()</code></td>
<td>-</td>
<td>创建时间</td>
</tr>
<tr>
<td><code>UpdatedAt</code></td>
<td><code>datetime</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>最后更新时间</td>
</tr>
<tr>
<td><code>UpdatedBy</code></td>
<td><code>nvarchar(100)</code></td>
<td>是</td>
<td>-</td>
<td>-</td>
<td>最后更新人ID</td>
</tr>
</tbody>
</table>
<h3 id="视图字典总览"><strong>视图字典总览</strong> </h3>
<p>包含以下视图：<code>v_DocumentReadDetails</code>（公文阅读详情视图）、<code>v_DocumentReadSummary</code>（公文阅读统计视图）、<code>v_FileCategoryPermissions</code>（文件分类权限视图）、<code>V_FileList</code>（文件列表视图）、<code>v_FileUserPermissionsAll</code>（用户文件权限视图）。</p>
<h4 id="1-v_documentreaddetails公文阅读详情视图"><strong>1. v_DocumentReadDetails（公文阅读详情视图）</strong> </h4>
<p><strong>说明</strong>：展示用户对已发布公文的阅读详情，包括用户信息、接收类型、阅读状态及时间，用于追踪单个用户对具体公文的阅读行为。</p>
<p><strong>关联表</strong>：</p>
<ul>
<li><code>v_UserReceivedDocuments</code>（用户可接收的公文视图）</li>
<li><code>DocumentReadRecord</code>（公文阅读记录表）</li>
</ul>
<table>
<thead>
<tr>
<th>字段名</th>
<th>数据类型（推断）</th>
<th>说明（含业务逻辑）</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>DocumentId</code></td>
<td><code>nvarchar(50)</code></td>
<td>公文ID（关联<code>Document.Id</code>）</td>
</tr>
<tr>
<td><code>Title</code></td>
<td><code>nvarchar(255)</code></td>
<td>公文标题（来自<code>v_UserReceivedDocuments</code>）</td>
</tr>
<tr>
<td><code>DocumentNumber</code></td>
<td><code>nvarchar(50)</code></td>
<td>公文文号（如“XX发〔2024〕X号”）</td>
</tr>
<tr>
<td><code>CategoryName</code></td>
<td><code>nvarchar(255)</code></td>
<td>公文分类名称（如“通知”“报告”）</td>
</tr>
<tr>
<td><code>UserID</code></td>
<td><code>varchar(50)</code></td>
<td>用户ID（关联<code>Users.UserID</code>）</td>
</tr>
<tr>
<td><code>UserName</code></td>
<td><code>nvarchar(50)</code></td>
<td>用户名（冗余显示）</td>
</tr>
<tr>
<td><code>EmpName</code></td>
<td><code>nvarchar(50)</code></td>
<td>员工姓名（用户真实姓名）</td>
</tr>
<tr>
<td><code>UserDeptId</code></td>
<td><code>nvarchar(50)</code></td>
<td>用户所属部门ID</td>
</tr>
<tr>
<td><code>UserDeptName</code></td>
<td><code>nvarchar(255)</code></td>
<td>用户所属部门名称（冗余显示）</td>
</tr>
<tr>
<td><code>ReceiveType</code></td>
<td>（推断为字符串）</td>
<td>接收类型（如“主送”“抄送”，区分用户与公文的接收关系）</td>
</tr>
<tr>
<td><code>IsRead</code></td>
<td><code>bit</code></td>
<td>阅读状态：1=已读，0=未读（判断用户是否阅读过该公文）</td>
</tr>
<tr>
<td><code>FirstReadTime</code></td>
<td><code>datetime</code></td>
<td>首次阅读时间（来自<code>DocumentReadRecord</code>的最早阅读时间）</td>
</tr>
<tr>
<td><code>LastReadTime</code></td>
<td><code>datetime</code></td>
<td>最后阅读时间（来自<code>DocumentReadRecord</code>的最晚查看时间）</td>
</tr>
<tr>
<td><code>ReadSortOrder</code></td>
<td><code>int</code></td>
<td>排序辅助字段：已读（1）排在未读（2）之前，用于前端按阅读状态排序展示</td>
</tr>
</tbody>
</table>
<p><strong>补充逻辑</strong>：</p>
<ul>
<li>仅包含<code>Status=3</code>（已发布）的公文，确保数据为正式生效的公文。</li>
<li>通过<code>DistinctUsers</code>子查询去重，避免同一用户-公文组合的重复记录。</li>
</ul>
<h4 id="2-v_documentreadsummary公文阅读统计视图"><strong>2. v_DocumentReadSummary（公文阅读统计视图）</strong> </h4>
<p><strong>说明</strong>：统计每个已发布公文的阅读覆盖情况，包括总接收用户数、已读/未读用户数及阅读百分比，用于分析公文的传阅效果。</p>
<p><strong>关联表</strong>：</p>
<ul>
<li><code>v_UserReceivedDocuments</code>（用户可接收的公文视图）</li>
</ul>
<table>
<thead>
<tr>
<th>字段名</th>
<th>数据类型（推断）</th>
<th>说明（含业务逻辑）</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>DocumentId</code></td>
<td><code>nvarchar(50)</code></td>
<td>公文ID（关联<code>Document.Id</code>）</td>
</tr>
<tr>
<td><code>Title</code></td>
<td><code>nvarchar(255)</code></td>
<td>公文标题</td>
</tr>
<tr>
<td><code>DocumentNumber</code></td>
<td><code>nvarchar(50)</code></td>
<td>公文文号</td>
</tr>
<tr>
<td><code>CategoryName</code></td>
<td><code>nvarchar(255)</code></td>
<td>公文分类名称</td>
</tr>
<tr>
<td><code>SecurityLevel</code></td>
<td><code>varchar(255)</code></td>
<td>安全级别（如“秘密”“公开”）</td>
</tr>
<tr>
<td><code>IssueDate</code></td>
<td><code>datetime2(7)</code></td>
<td>发文日期</td>
</tr>
<tr>
<td><code>PublishTime</code></td>
<td><code>datetime</code></td>
<td>发布时间</td>
</tr>
<tr>
<td><code>Status</code></td>
<td><code>int</code></td>
<td>公文状态（此处固定为3，表示已发布）</td>
</tr>
<tr>
<td><code>StatusName</code></td>
<td><code>nvarchar(50)</code></td>
<td>状态名称（对应<code>Status=3</code>，如“已发布”）</td>
</tr>
<tr>
<td><code>DraftDeptId</code></td>
<td><code>nvarchar(50)</code></td>
<td>拟稿部门ID</td>
</tr>
<tr>
<td><code>DraftDeptName</code></td>
<td><code>nvarchar(255)</code></td>
<td>拟稿部门名称</td>
</tr>
<tr>
<td><code>TotalUsers</code></td>
<td><code>int</code></td>
<td>总接收用户数（该公文的所有接收者数量）</td>
</tr>
<tr>
<td><code>ReadUsers</code></td>
<td><code>int</code></td>
<td>已读用户数（<code>IsRead=1</code>的用户数量）</td>
</tr>
<tr>
<td><code>UnreadUsers</code></td>
<td><code>int</code></td>
<td>未读用户数（<code>IsRead=0</code>的用户数量，<code>TotalUsers - ReadUsers</code>）</td>
</tr>
<tr>
<td><code>ReadPercentage</code></td>
<td><code>float</code></td>
<td>阅读百分比（<code>ReadUsers/TotalUsers*100</code>，保留两位小数，反映公文传阅覆盖率）</td>
</tr>
</tbody>
</table>
<p><strong>补充逻辑</strong>：</p>
<ul>
<li>仅统计<code>Status=3</code>（已发布）的公文，确保统计对象为正式发布的内容。</li>
<li>通过<code>GROUP BY</code>聚合每个公文的阅读数据，支持按部门、分类等维度分析阅读效果。</li>
</ul>
<h4 id="3-v_filecategorypermissions文件分类权限视图"><strong>3. v_FileCategoryPermissions（文件分类权限视图）</strong> </h4>
<p><strong>说明</strong>：展示文件分类的有效权限配置，明确用户/部门对分类的操作权限（查看、编辑等），用于权限管理和校验。</p>
<p><strong>关联表</strong>：</p>
<ul>
<li><code>FileCategoryPermissions</code>（文件分类权限表）</li>
<li><code>Users</code>（用户表）</li>
<li><code>pubdept</code>（部门表，推测）</li>
</ul>
<table>
<thead>
<tr>
<th>字段名</th>
<th>数据类型（推断）</th>
<th>说明（含业务逻辑）</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>id</code></td>
<td><code>varchar(36)</code></td>
<td>权限记录ID（关联<code>FileCategoryPermissions.id</code>）</td>
</tr>
<tr>
<td><code>PrincipalType</code></td>
<td><code>nvarchar(20)</code></td>
<td>权限主体类型：<code>User</code>（用户）、<code>Organization</code>（部门）、<code>Unknown</code>（未知）</td>
</tr>
<tr>
<td><code>PrincipalName</code></td>
<td><code>nvarchar(255)</code></td>
<td>权限主体名称：用户姓名（关联<code>Users.UserName</code>）或部门名称（关联<code>pubdept.deptdesc</code>）</td>
</tr>
<tr>
<td><code>CanView</code></td>
<td><code>bit</code></td>
<td>是否允许查看：1=是，0=否</td>
</tr>
<tr>
<td><code>CanEdit</code></td>
<td><code>bit</code></td>
<td>是否允许编辑：1=是，0=否</td>
</tr>
<tr>
<td><code>CanDelete</code></td>
<td><code>bit</code></td>
<td>是否允许删除：1=是，0=否</td>
</tr>
<tr>
<td><code>CanShare</code></td>
<td><code>bit</code></td>
<td>是否允许分享：1=是，0=否</td>
</tr>
<tr>
<td><code>Status</code></td>
<td><code>nvarchar(10)</code></td>
<td>权限状态：<code>Active</code>（启用）、<code>Inactive</code>（禁用），此处仅显示启用状态（<code>status=1</code>）</td>
</tr>
<tr>
<td><code>InheritFrom</code></td>
<td><code>varchar(36)</code></td>
<td>继承来源（从哪个权限记录继承，用于权限层级复用）</td>
</tr>
<tr>
<td><code>Remark</code></td>
<td><code>nvarchar(500)</code></td>
<td>权限备注说明</td>
</tr>
<tr>
<td><code>UpdatedAt</code></td>
<td><code>datetime</code></td>
<td>权限最后更新时间</td>
</tr>
<tr>
<td><code>UpdatedBy</code></td>
<td><code>nvarchar(500)</code></td>
<td>最后更新人</td>
</tr>
</tbody>
</table>
<p><strong>补充逻辑</strong>：</p>
<ul>
<li>仅显示<code>status=1</code>（启用）的权限记录，过滤无效配置。</li>
<li>通过<code>COALESCE</code>优先显示用户姓名，无用户时显示部门名称，确保主体明确。</li>
</ul>
<h4 id="4-v_fileuserpermissionsall用户文件权限全量视图"><strong>4. v_FileUserPermissionsAll（用户文件权限全量视图）</strong> </h4>
<p><strong>说明</strong>：展示所有用户的文件分类权限明细，包括用户基本信息、权限状态及授权人，用于全量权限校验和管理。</p>
<p><strong>关联表</strong>：</p>
<ul>
<li><code>Users</code>（用户表）</li>
<li><code>pubemp</code>（员工表，推测）</li>
<li><code>pubdept</code>（部门表，推测）</li>
<li><code>FileCategoryPermissions</code>（文件分类权限表）</li>
</ul>
<table>
<thead>
<tr>
<th>字段名</th>
<th>数据类型（推断）</th>
<th>说明（含业务逻辑）</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>UserId</code></td>
<td><code>varchar(50)</code></td>
<td>用户ID（关联<code>Users.UserID</code>）</td>
</tr>
<tr>
<td><code>LoginName</code></td>
<td><code>nvarchar(50)</code></td>
<td>登录名（关联<code>Users.UserName</code>）</td>
</tr>
<tr>
<td><code>EmployeeName</code></td>
<td><code>nvarchar(50)</code></td>
<td>员工姓名（关联<code>pubemp.empdesc</code>）</td>
</tr>
<tr>
<td><code>EmployeeId</code></td>
<td><code>varchar(50)</code></td>
<td>员工编号（关联<code>pubemp.empid</code>）</td>
</tr>
<tr>
<td><code>DeptId</code></td>
<td><code>varchar(50)</code></td>
<td>部门ID（关联<code>pubdept.deptid</code>）</td>
</tr>
<tr>
<td><code>DeptName</code></td>
<td><code>nvarchar(255)</code></td>
<td>部门名称（关联<code>pubdept.deptdesc</code>）</td>
</tr>
<tr>
<td><code>ParentDeptId</code></td>
<td><code>varchar(50)</code></td>
<td>上级部门ID（关联<code>pubdept.updeptid</code>）</td>
</tr>
<tr>
<td><code>ParentDeptName</code></td>
<td><code>nvarchar(255)</code></td>
<td>上级部门名称（关联<code>pubdept.deptdesc</code>，用于层级展示）</td>
</tr>
<tr>
<td><code>Category_id</code></td>
<td><code>varchar(36)</code></td>
<td>文件分类ID（关联<code>FileCategory.Id</code>）</td>
</tr>
<tr>
<td><code>HasPermissionRecord</code></td>
<td><code>bit</code></td>
<td>是否有权限记录：1=存在权限配置，0=无（用于判断是否自定义过权限）</td>
</tr>
<tr>
<td><code>HasViewPermission</code></td>
<td><code>bit</code></td>
<td>是否有查看权限：1=是，0=否（基于<code>can_view</code>转换）</td>
</tr>
<tr>
<td><code>HasEditPermission</code></td>
<td><code>bit</code></td>
<td>是否有编辑权限：1=是，0=否（基于<code>can_edit</code>转换）</td>
</tr>
<tr>
<td><code>HasDeletePermission</code></td>
<td><code>bit</code></td>
<td>是否有删除权限：1=是，0=否（基于<code>can_delete</code>转换）</td>
</tr>
<tr>
<td><code>HasSharePermission</code></td>
<td><code>bit</code></td>
<td>是否有分享权限：1=是，0=否（基于<code>can_share</code>转换）</td>
</tr>
<tr>
<td><code>PermissionUpdateTime</code></td>
<td><code>datetime</code></td>
<td>权限最后更新时间（来自<code>FileCategoryPermissions.updated_at</code>）</td>
</tr>
<tr>
<td><code>Authorizer</code></td>
<td><code>nvarchar(50)</code></td>
<td>授权人（最后更新权限的用户姓名，关联<code>Users.UserName</code>）</td>
</tr>
</tbody>
</table>
<p><strong>补充逻辑</strong>：</p>
<ul>
<li>包含所有用户（即使无权限配置），通过<code>LEFT JOIN</code>确保用户信息完整。</li>
<li>权限字段通过<code>CASE</code>转换为0/1，便于前端直接判断是否有权限。</li>
</ul>

      </div>
      
      
    
    
    
    
    
    
  
    </body></html>